/*
 * compara-ACKs.h
 *
 *  Created on: 05/07/2011
 *      Author: jem
 */

#ifndef COMPARAACKS_H_
#define COMPARAACKS_H_

#include <stdlib.h>
#include <string>
#include <fstream>
#include <iostream>

using namespace std;

ofstream resACKsOUT("datos/resultadosACKs.txt");//estadisticas

int compara(int &perd, int &total) {

	int flag = 0;

	int ack1, ack2;
	int nAck, nAckPerd;
	float tiempo1, tiempo2;

	nAck = 0;
	nAckPerd = 0;

	ifstream in1("datos/acks1.txt");//(servidor)
	ifstream in2("datos/acks2.txt");//el q tiene la secuencia de traza completa (cliente)
	ofstream out1("datos/datos1graficaACKs.txt");//entregados
	ofstream out2("datos/datos2graficaACKs.txt");//perdidos

	in1 >> tiempo1 >> ack1;
	in2 >> tiempo2 >> ack2;

	while (!in2.eof()) {

		if (ack1 > ack2) {//ack perdido
			out2 << tiempo2 << "\t1.1" << endl;//indicar ack perdido
			in2 >> tiempo2 >> ack2;
			nAckPerd++;
		} else if (ack1 < ack2) {//no deberia
			in1 >> tiempo1 >> ack1;
		} else {// son iguales
			out1 << tiempo2 << "\t1" << endl;//indicar ack entregado
			in1 >> tiempo1 >> ack1;
			in2 >> tiempo2 >> ack2;
		}
		if ((in1.eof()) && !(in2.eof())) {
			out2 << tiempo2 << "\t1.1" << endl;//indicar ack perdido
			in2 >> tiempo2 >> ack2;
			nAckPerd++;
		}
		nAck++;
	}
	float porcent;
	if (nAck != 0) {
		porcent = (nAckPerd * 1.0 / nAck) * 100.0;
	} else {
		//out1 << 0 << "\t0" << endl;
		//out2 << 0 << "\t0" << endl;
		porcent = 0.0;
		flag=0;
	}
	resACKsOUT << "\t\t" << nAckPerd << " ACKs perdidos: " << porcent << "% "
			<< "de " << nAck << endl;
	out1.close();
	out2.close();
	in1.close();
	in2.close();
	perd = nAckPerd;
	total = nAck;
	return flag;
}

int comparaDup(int &perd, int &total) {

	int flag = 1;

	int ack1, ack2, ant = 0, num1, num2;
	float tiempo1, tiempo2;
	int nDup, nDupPerd;

	ifstream in1("datos/acks-dup1.txt");//(servidor)
	ifstream in2("datos/acks-dup2.txt");//el q tiene la secuencia de traza completa (cliente)
	ofstream out1("datos/datos3graficaACKs.txt");//entregados
	ofstream out2("datos/datos4graficaACKs.txt");//perdidos

	nDup = 0;
	nDupPerd = 0;

	in1 >> tiempo1 >> ack1 >> num1;
	in2 >> tiempo2 >> ack2 >> num2;

	ant = ack2;
	while (!in2.eof()) {
		if (ack1 == ack2) {
			if ((num1 > num2) || (in1.eof())) {//ack perdido
				out2 << tiempo2 << "\t0.9" << endl;//indicar ack perdido
				in2 >> tiempo2 >> ack2 >> num2;
				nDupPerd++;
			} else if (num1 < num2) {//no deberia, x si
				in1 >> tiempo1 >> ack1 >> num1;
			} else {// son iguales
				out1 << tiempo2 << "\t0.8" << endl;//indicar ack entregado
				in1 >> tiempo1 >> ack1 >> num1;
				in2 >> tiempo2 >> ack2 >> num2;
			}
		} else {
			if (ack1 > ack2) {//ack perdido (ack2)
				out2 << tiempo2 << "\t0.9" << endl;//indicar ack perdido
				in2 >> tiempo2 >> ack2 >> num2;
				nDupPerd++;
			} else if (ack1 < ack2) {//no deberia, x si
				in1 >> tiempo1 >> ack1 >> num1;
			}
		}
		if ((in1.eof()) && !(in2.eof())) {
			in2 >> tiempo2 >> ack2 >> num2;
		}
		nDup++;
	}

	float porcent;
	if (nDup != 0) {
		porcent = (nDupPerd * 1.0 / nDup) * 100.0;
	} else {
		//out1 << 0 << "\t0" << endl;
		//out2 << 0 << "\t0" << endl;
		porcent = 0.0;
		flag = 0;
	}
	resACKsOUT << "\t\t" << nDupPerd << " ACKsDup perdidos: " << porcent
			<< "% " << "de " << nDup << endl;
	out1.close();
	out2.close();
	in1.close();
	in2.close();
	perd = nDupPerd;
	total = nDup;

	return flag;
}
#endif /* COMPARAACKS_H_ */
